@contentful/field-editor-markdown 1.1.8 → 1.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.1.10](https://github.com/contentful/field-editors/compare/@contentful/field-editor-markdown@1.1.9...@contentful/field-editor-markdown@1.1.10) (2023-01-27)
7
+
8
+ ### Bug Fixes
9
+
10
+ - mail to links replace ampersand [TOL-923] ([#1331](https://github.com/contentful/field-editors/issues/1331)) ([8e3d5df](https://github.com/contentful/field-editors/commit/8e3d5df5105a48126a790b8c341139fe7cf11d72))
11
+
12
+ ## [1.1.9](https://github.com/contentful/field-editors/compare/@contentful/field-editor-markdown@1.1.8...@contentful/field-editor-markdown@1.1.9) (2022-12-08)
13
+
14
+ **Note:** Version bump only for package @contentful/field-editor-markdown
15
+
6
16
  ## [1.1.8](https://github.com/contentful/field-editors/compare/@contentful/field-editor-markdown@1.1.7...@contentful/field-editor-markdown@1.1.8) (2022-07-29)
7
17
 
8
18
  **Note:** Version bump only for package @contentful/field-editor-markdown
@@ -25,8 +25,8 @@ var min = _interopDefault(require('lodash/min'));
25
25
  var max = _interopDefault(require('lodash/max'));
26
26
  var times = _interopDefault(require('lodash/times'));
27
27
  var repeat = _interopDefault(require('lodash/repeat'));
28
- var Markdown = _interopDefault(require('markdown-to-jsx'));
29
28
  var DOMPurify = _interopDefault(require('dompurify'));
29
+ var Markdown = _interopDefault(require('markdown-to-jsx'));
30
30
  var inRange = _interopDefault(require('lodash/inRange'));
31
31
  var isObject = _interopDefault(require('lodash/isObject'));
32
32
  var extend = _interopDefault(require('lodash/extend'));
@@ -34,80 +34,6 @@ var isString = _interopDefault(require('lodash/isString'));
34
34
  var isFinite = _interopDefault(require('lodash/isFinite'));
35
35
  var forEach = _interopDefault(require('lodash/forEach'));
36
36
 
37
- var styles = {
38
- root: /*#__PURE__*/emotion.css({
39
- display: 'flex',
40
- zIndex: 10,
41
- flexDirection: 'row',
42
- justifyContent: 'flex-end',
43
- overflow: 'hidden',
44
- marginBottom: '-1px',
45
- fontSize: tokens.fontSizeM
46
- }),
47
- tab: /*#__PURE__*/emotion.css({
48
- cursor: 'pointer',
49
- color: tokens.gray700,
50
- padding: tokens.spacingXs,
51
- minWidth: '70px',
52
- border: "1px solid " + tokens.gray400,
53
- borderTopLeftRadius: tokens.borderRadiusSmall,
54
- borderTopRightRadius: tokens.borderRadiusSmall,
55
- marginLeft: tokens.spacingXs,
56
- textAlign: 'center',
57
- backgroundColor: tokens.gray100,
58
- borderBottomColor: tokens.gray100,
59
- outline: 'none',
60
- '&:focus': {
61
- boxShadow: tokens.boxShadowHeavy
62
- },
63
- transition: "all " + tokens.transitionEasingDefault + " " + tokens.transitionDurationShort
64
- }),
65
- inactiveTab: /*#__PURE__*/emotion.css({
66
- background: tokens.gray200,
67
- borderBottomColor: tokens.gray400,
68
- '&:hover': {
69
- background: tokens.gray300
70
- }
71
- })
72
- };
73
-
74
- function MarkdownTabItem(props) {
75
- var _cx;
76
-
77
- return React__default.createElement("div", {
78
- className: emotion.cx(styles.tab, (_cx = {}, _cx[styles.inactiveTab] = props.isActive === false, _cx)),
79
- onClick: function onClick() {
80
- props.onSelect(props.name);
81
- },
82
- onKeyDown: function onKeyDown(e) {
83
- if (e.keyCode === 13) {
84
- props.onSelect(props.name);
85
- }
86
- },
87
- tabIndex: 0,
88
- role: "tab",
89
- "aria-controls": props.name,
90
- "aria-selected": props.isActive === true,
91
- "data-test-id": props.testId
92
- }, props.children);
93
- }
94
-
95
- function MarkdownTabs(props) {
96
- return React__default.createElement("div", {
97
- className: styles.root
98
- }, React__default.createElement(MarkdownTabItem, {
99
- name: "editor",
100
- onSelect: props.onSelect,
101
- isActive: props.active === 'editor',
102
- testId: "markdown-tab-md"
103
- }, "Editor"), React__default.createElement(MarkdownTabItem, {
104
- name: "preview",
105
- onSelect: props.onSelect,
106
- isActive: props.active === 'preview',
107
- testId: "markdown-tab-preview"
108
- }, "Preview"));
109
- }
110
-
111
37
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
112
38
  try {
113
39
  var info = gen[key](arg);
@@ -186,6 +112,80 @@ function _taggedTemplateLiteralLoose(strings, raw) {
186
112
  return strings;
187
113
  }
188
114
 
115
+ var styles = {
116
+ root: /*#__PURE__*/emotion.css({
117
+ display: 'flex',
118
+ zIndex: 10,
119
+ flexDirection: 'row',
120
+ justifyContent: 'flex-end',
121
+ overflow: 'hidden',
122
+ marginBottom: '-1px',
123
+ fontSize: tokens.fontSizeM
124
+ }),
125
+ tab: /*#__PURE__*/emotion.css({
126
+ cursor: 'pointer',
127
+ color: tokens.gray700,
128
+ padding: tokens.spacingXs,
129
+ minWidth: '70px',
130
+ border: "1px solid " + tokens.gray400,
131
+ borderTopLeftRadius: tokens.borderRadiusSmall,
132
+ borderTopRightRadius: tokens.borderRadiusSmall,
133
+ marginLeft: tokens.spacingXs,
134
+ textAlign: 'center',
135
+ backgroundColor: tokens.gray100,
136
+ borderBottomColor: tokens.gray100,
137
+ outline: 'none',
138
+ '&:focus': {
139
+ boxShadow: tokens.boxShadowHeavy
140
+ },
141
+ transition: "all " + tokens.transitionEasingDefault + " " + tokens.transitionDurationShort
142
+ }),
143
+ inactiveTab: /*#__PURE__*/emotion.css({
144
+ background: tokens.gray200,
145
+ borderBottomColor: tokens.gray400,
146
+ '&:hover': {
147
+ background: tokens.gray300
148
+ }
149
+ })
150
+ };
151
+
152
+ function MarkdownTabItem(props) {
153
+ var _cx;
154
+
155
+ return React__default.createElement("div", {
156
+ className: emotion.cx(styles.tab, (_cx = {}, _cx[styles.inactiveTab] = props.isActive === false, _cx)),
157
+ onClick: function onClick() {
158
+ props.onSelect(props.name);
159
+ },
160
+ onKeyDown: function onKeyDown(e) {
161
+ if (e.keyCode === 13) {
162
+ props.onSelect(props.name);
163
+ }
164
+ },
165
+ tabIndex: 0,
166
+ role: "tab",
167
+ "aria-controls": props.name,
168
+ "aria-selected": props.isActive === true,
169
+ "data-test-id": props.testId
170
+ }, props.children);
171
+ }
172
+
173
+ function MarkdownTabs(props) {
174
+ return React__default.createElement("div", {
175
+ className: styles.root
176
+ }, React__default.createElement(MarkdownTabItem, {
177
+ name: "editor",
178
+ onSelect: props.onSelect,
179
+ isActive: props.active === 'editor',
180
+ testId: "markdown-tab-md"
181
+ }, "Editor"), React__default.createElement(MarkdownTabItem, {
182
+ name: "preview",
183
+ onSelect: props.onSelect,
184
+ isActive: props.active === 'preview',
185
+ testId: "markdown-tab-preview"
186
+ }, "Preview"));
187
+ }
188
+
189
189
  var _excluded = ["label"],
190
190
  _excluded2 = ["label"],
191
191
  _excluded3 = ["label"],
@@ -210,7 +210,7 @@ var Zen = function Zen(_ref) {
210
210
  var label = _ref.label,
211
211
  rest = _objectWithoutPropertiesLoose(_ref, _excluded);
212
212
 
213
- return React__default.createElement("svg", Object.assign({
213
+ return React__default.createElement("svg", _extends({
214
214
  width: 14,
215
215
  height: 14,
216
216
  viewBox: "0 0 1792 1792"
@@ -224,7 +224,7 @@ var Strikethrough = function Strikethrough(_ref2) {
224
224
  var label = _ref2.label,
225
225
  rest = _objectWithoutPropertiesLoose(_ref2, _excluded2);
226
226
 
227
- return React__default.createElement("svg", Object.assign({
227
+ return React__default.createElement("svg", _extends({
228
228
  width: 14,
229
229
  height: 14,
230
230
  viewBox: "0 0 1792 1792"
@@ -238,7 +238,7 @@ var Indent = function Indent(_ref3) {
238
238
  var label = _ref3.label,
239
239
  rest = _objectWithoutPropertiesLoose(_ref3, _excluded3);
240
240
 
241
- return React__default.createElement("svg", Object.assign({
241
+ return React__default.createElement("svg", _extends({
242
242
  width: 14,
243
243
  height: 14,
244
244
  viewBox: "0 0 1792 1792"
@@ -252,7 +252,7 @@ var Dedent = function Dedent(_ref4) {
252
252
  var label = _ref4.label,
253
253
  rest = _objectWithoutPropertiesLoose(_ref4, _excluded4);
254
254
 
255
- return React__default.createElement("svg", Object.assign({
255
+ return React__default.createElement("svg", _extends({
256
256
  width: 14,
257
257
  height: 14,
258
258
  viewBox: "0 0 1792 1792"
@@ -266,7 +266,7 @@ var Cubes = function Cubes(_ref5) {
266
266
  var label = _ref5.label,
267
267
  rest = _objectWithoutPropertiesLoose(_ref5, _excluded5);
268
268
 
269
- return React__default.createElement("svg", Object.assign({
269
+ return React__default.createElement("svg", _extends({
270
270
  width: 18,
271
271
  height: 14,
272
272
  viewBox: "0 0 2304 1792"
@@ -280,7 +280,7 @@ var Table = function Table(_ref6) {
280
280
  var label = _ref6.label,
281
281
  rest = _objectWithoutPropertiesLoose(_ref6, _excluded6);
282
282
 
283
- return React__default.createElement("svg", Object.assign({
283
+ return React__default.createElement("svg", _extends({
284
284
  width: 14,
285
285
  height: 14,
286
286
  viewBox: "0 0 1792 1792"
@@ -294,7 +294,7 @@ var SpecialChar = function SpecialChar(_ref7) {
294
294
  var label = _ref7.label,
295
295
  rest = _objectWithoutPropertiesLoose(_ref7, _excluded7);
296
296
 
297
- return React__default.createElement("svg", Object.assign({
297
+ return React__default.createElement("svg", _extends({
298
298
  width: 14,
299
299
  height: 14,
300
300
  viewBox: "0 0 1792 1792"
@@ -308,7 +308,7 @@ var OrgLinks = function OrgLinks(_ref8) {
308
308
  var label = _ref8.label,
309
309
  rest = _objectWithoutPropertiesLoose(_ref8, _excluded8);
310
310
 
311
- return React__default.createElement("svg", Object.assign({
311
+ return React__default.createElement("svg", _extends({
312
312
  width: 14,
313
313
  height: 14,
314
314
  viewBox: "0 0 1792 1792"
@@ -322,7 +322,7 @@ var Undo = function Undo(_ref9) {
322
322
  var label = _ref9.label,
323
323
  rest = _objectWithoutPropertiesLoose(_ref9, _excluded9);
324
324
 
325
- return React__default.createElement("svg", Object.assign({
325
+ return React__default.createElement("svg", _extends({
326
326
  width: 14,
327
327
  height: 14,
328
328
  viewBox: "0 0 1792 1792"
@@ -336,7 +336,7 @@ var Redo = function Redo(_ref10) {
336
336
  var label = _ref10.label,
337
337
  rest = _objectWithoutPropertiesLoose(_ref10, _excluded10);
338
338
 
339
- return React__default.createElement("svg", Object.assign({
339
+ return React__default.createElement("svg", _extends({
340
340
  width: 14,
341
341
  height: 14,
342
342
  viewBox: "0 0 1792 1792"
@@ -372,7 +372,7 @@ var HeadingSelector = function HeadingSelector(props) {
372
372
 
373
373
  var InsertLinkSelector = function InsertLinkSelector(props) {
374
374
  if (props.canAddNew) {
375
- return React__default.createElement(MultipleMediaContextMenu, Object.assign({}, props));
375
+ return React__default.createElement(MultipleMediaContextMenu, _extends({}, props));
376
376
  } else {
377
377
  return React__default.createElement(f36Components.Button, {
378
378
  isDisabled: props.disabled,
@@ -457,7 +457,7 @@ var ToolbarButton = /*#__PURE__*/React__default.forwardRef(function (props, ref)
457
457
  className: styles$1.tooltip,
458
458
  placement: tooltipPlace,
459
459
  content: tooltip
460
- }, React__default.createElement(f36Components.IconButton, Object.assign({}, otherProps, {
460
+ }, React__default.createElement(f36Components.IconButton, _extends({}, otherProps, {
461
461
  ref: ref,
462
462
  className: emotion.cx(styles$1.button, className),
463
463
  isDisabled: isDisabled,
@@ -656,7 +656,7 @@ function DefaultMarkdownToolbar(props) {
656
656
  className: styles$1.root
657
657
  }, React__default.createElement(f36Components.Flex, {
658
658
  justifyContent: "space-between"
659
- }, React__default.createElement(f36Components.Flex, null, React__default.createElement(MainButtons, Object.assign({}, props)), React__default.createElement(ToolbarButton, {
659
+ }, React__default.createElement(f36Components.Flex, null, React__default.createElement(MainButtons, _extends({}, props)), React__default.createElement(ToolbarButton, {
660
660
  isDisabled: props.disabled,
661
661
  testId: "markdown-action-button-toggle-additional",
662
662
  tooltip: showAdditional ? 'Hide additional actions' : 'More actions',
@@ -683,14 +683,14 @@ function DefaultMarkdownToolbar(props) {
683
683
  })))), showAdditional && React__default.createElement(f36Components.Flex, {
684
684
  justifyContent: "space-between",
685
685
  marginTop: "spacingXs"
686
- }, React__default.createElement(f36Components.Flex, null, React__default.createElement(AdditionalButtons, Object.assign({}, props)))));
686
+ }, React__default.createElement(f36Components.Flex, null, React__default.createElement(AdditionalButtons, _extends({}, props)))));
687
687
  }
688
688
  function ZenMarkdownToolbar(props) {
689
689
  return React__default.createElement("div", {
690
690
  className: styles$1.root
691
691
  }, React__default.createElement(f36Components.Flex, {
692
692
  justifyContent: "space-between"
693
- }, React__default.createElement(f36Components.Flex, null, React__default.createElement(MainButtons, Object.assign({}, props)), React__default.createElement(AdditionalButtons, Object.assign({}, props))), React__default.createElement(f36Components.Flex, null, React__default.createElement(InsertLinkSelector, {
693
+ }, React__default.createElement(f36Components.Flex, null, React__default.createElement(MainButtons, _extends({}, props)), React__default.createElement(AdditionalButtons, _extends({}, props))), React__default.createElement(f36Components.Flex, null, React__default.createElement(InsertLinkSelector, {
694
694
  disabled: props.disabled,
695
695
  onSelectExisting: props.actions.linkExistingMedia,
696
696
  onAddNew: props.actions.addNewMedia,
@@ -712,10 +712,10 @@ function ZenMarkdownToolbar(props) {
712
712
  }
713
713
  var MarkdownToolbar = /*#__PURE__*/React__default.memo(function (props) {
714
714
  if (props.mode === 'zen') {
715
- return React__default.createElement(ZenMarkdownToolbar, Object.assign({}, props));
715
+ return React__default.createElement(ZenMarkdownToolbar, _extends({}, props));
716
716
  }
717
717
 
718
- return React__default.createElement(DefaultMarkdownToolbar, Object.assign({}, props));
718
+ return React__default.createElement(DefaultMarkdownToolbar, _extends({}, props));
719
719
  });
720
720
  MarkdownToolbar.displayName = 'MarkdownToolbar';
721
721
 
@@ -1886,6 +1886,14 @@ var openCheatsheetModal = function openCheatsheetModal(dialogs) {
1886
1886
  });
1887
1887
  };
1888
1888
 
1889
+ // This code will replace '&' with '&' only inside the href attribute of the mailto link.
1890
+ // Otherwise the mailto link will not work correctly
1891
+ var replaceMailtoAmp = function replaceMailtoAmp(string) {
1892
+ return string.replace(/href="mailto:[^"]*&/g, function (match) {
1893
+ return match.replace(/&/g, '&');
1894
+ });
1895
+ };
1896
+
1889
1897
  var _excluded$2 = ["Embedly", "children"];
1890
1898
 
1891
1899
  var _templateObject$1;
@@ -1917,7 +1925,7 @@ function MarkdownLink(props) {
1917
1925
  });
1918
1926
  }
1919
1927
 
1920
- return React__default.createElement("a", Object.assign({}, rest, {
1928
+ return React__default.createElement("a", _extends({}, rest, {
1921
1929
  target: "_blank",
1922
1930
  rel: "noopener noreferrer"
1923
1931
  }), children);
@@ -1932,7 +1940,7 @@ var MarkdownPreview = /*#__PURE__*/React__default.memo(function (props) {
1932
1940
  // https://github.com/cure53/DOMPurify/blob/main/src/tags.js#L3-L121
1933
1941
 
1934
1942
  var cleanHTML = React__default.useMemo(function () {
1935
- return DOMPurify.sanitize(props.value);
1943
+ return replaceMailtoAmp(DOMPurify.sanitize(props.value));
1936
1944
  }, [props.value]);
1937
1945
  return React__default.createElement("div", {
1938
1946
  className: className,
@@ -2072,11 +2080,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
2072
2080
 
2073
2081
 
2074
2082
  var IteratorPrototype = {};
2075
-
2076
- IteratorPrototype[iteratorSymbol] = function () {
2083
+ define(IteratorPrototype, iteratorSymbol, function () {
2077
2084
  return this;
2078
- };
2079
-
2085
+ });
2080
2086
  var getProto = Object.getPrototypeOf;
2081
2087
  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
2082
2088
 
@@ -2087,8 +2093,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
2087
2093
  }
2088
2094
 
2089
2095
  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
2090
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
2091
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
2096
+ GeneratorFunction.prototype = GeneratorFunctionPrototype;
2097
+ define(Gp, "constructor", GeneratorFunctionPrototype);
2098
+ define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
2092
2099
  GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
2093
2100
  // Iterator interface in terms of a single ._invoke method.
2094
2101
 
@@ -2193,11 +2200,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
2193
2200
  }
2194
2201
 
2195
2202
  defineIteratorMethods(AsyncIterator.prototype);
2196
-
2197
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
2203
+ define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
2198
2204
  return this;
2199
- };
2200
-
2205
+ });
2201
2206
  exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
2202
2207
  // AsyncIterator objects; they just return a Promise for the value of
2203
2208
  // the final result produced by the iterator.
@@ -2374,13 +2379,12 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
2374
2379
  // object to not be returned from this call. This ensures that doesn't happen.
2375
2380
  // See https://github.com/facebook/regenerator/issues/274 for more details.
2376
2381
 
2377
- Gp[iteratorSymbol] = function () {
2382
+ define(Gp, iteratorSymbol, function () {
2378
2383
  return this;
2379
- };
2380
-
2381
- Gp.toString = function () {
2384
+ });
2385
+ define(Gp, "toString", function () {
2382
2386
  return "[object Generator]";
2383
- };
2387
+ });
2384
2388
 
2385
2389
  function pushTryEntry(locs) {
2386
2390
  var entry = {
@@ -2692,14 +2696,19 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
2692
2696
  } catch (accidentalStrictMode) {
2693
2697
  // This module should not be running in strict mode, so the above
2694
2698
  // assignment should always work unless something is misconfigured. Just
2695
- // in case runtime.js accidentally runs in strict mode, we can escape
2699
+ // in case runtime.js accidentally runs in strict mode, in modern engines
2700
+ // we can explicitly access globalThis. In older engines we can escape
2696
2701
  // strict mode using a global Function call. This could conceivably fail
2697
2702
  // if a Content Security Policy forbids using Function, but in that case
2698
2703
  // the proper solution is to fix the accidental strict mode problem. If
2699
2704
  // you've misconfigured your bundler to force strict mode and applied a
2700
2705
  // CSP to forbid Function, and you're not willing to fix either of those
2701
2706
  // problems, please detail your unique predicament in a GitHub issue.
2702
- Function("r", "regeneratorRuntime = r")(runtime);
2707
+ if (typeof globalThis === "object") {
2708
+ globalThis.regeneratorRuntime = runtime;
2709
+ } else {
2710
+ Function("r", "regeneratorRuntime = r")(runtime);
2711
+ }
2703
2712
  }
2704
2713
  });
2705
2714
 
@@ -4466,7 +4475,7 @@ function MarkdownEditorConnected(props) {
4466
4475
  setValue = _ref.setValue,
4467
4476
  externalReset = _ref.externalReset;
4468
4477
  // on external change reset component completely and init with initial value again
4469
- return React__default.createElement(MarkdownEditor, Object.assign({}, props, {
4478
+ return React__default.createElement(MarkdownEditor, _extends({}, props, {
4470
4479
  key: "markdown-editor-" + externalReset,
4471
4480
  initialValue: value,
4472
4481
  disabled: disabled,